package com.tw.modules.web;


import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import com.tw.modules.common.ConvertJson;
import com.tw.modules.entity.Diary;
import com.tw.modules.entity.Plan;
import com.tw.modules.service.DiaryService;
import com.tw.modules.service.PlanService;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author maxiaodong
 * @since 2018-04-07
 */
@RestController
@RequestMapping("/plan")
public class PlanController {
	@Autowired
	PlanService planserviceimpl;
	
	@Autowired
	DiaryService diaryserviceimpl;
	/**
	 * 查询单个用户全部计划(测试通过)
	 * 需求分析：一个用户存在多个计划，根据手机号查询全部计划，并以集合形式返回
	 * @param dphone
	 * @return
	 */
	@ResponseBody
	@RequestMapping(value = "/select", method = { RequestMethod.GET })
	public List<Plan> select(@RequestParam("d_phone")long dphone){
		List<Plan> plans = planserviceimpl.selectPlansByPhone(dphone);
		return plans;
	}
	
	/**
	 * 删除用户计划表(测试通过)
	 * 需求分析：直接删除plan表中该用户的计划
	 * @param dphone
	 * @return
	 */
	//TODO 小bug:使用系统自带的deleteById()总是出错，目前使用自定义的deleteByPid()方法
	@ResponseBody
	@RequestMapping(value = "/delete", method = { RequestMethod.GET })
	public String delete(@RequestParam("p_id")int pid){
		boolean flag = planserviceimpl.deleteByPid(pid);
		if (flag) {
			return ConvertJson.responseJSON("success");
		}
		return ConvertJson.responseJSON("fail");
	}
	
	/**
	 * 修改用户计划表（测试通过）
	 * 需求分析：用户修改已经新建过的计划表后，该用户对应的diary表也不增加相应番茄个数和时间，只是单纯的修改plan表
	 * @param plan
	 * @return
	 */
	@ResponseBody
	@RequestMapping(value = "/update", method = { RequestMethod.GET })
	public String update(@RequestParam("phone")long phone,
			@RequestParam("title")String title,
			@RequestParam("duration")double duration){
		Plan plan = new Plan();
		plan.setpPhone(phone);
		plan.setpDuration(duration);
		plan.setpTitle(title);
		boolean flag = planserviceimpl.updateById(plan);
		if (flag) {
			return ConvertJson.responseJSON("success");
		}
		return ConvertJson.responseJSON("fail");
	}
	
	/**
	 * 增加用户计划表（测试成功）
	 * 需求分析：新建计划时，才查询diary表中是否存在该用户当前日期的记录，如果不存在新建该记录，番茄个数和时间设置为0，再
	 * 新建计划;如果存在直接新建计划;
	 * 注意：用户新建计划，并不一定完成计划了，该用户对应的diary表不能增加相应番茄个数和时间，只是单纯的新建plan表
	 * @param plan
	 * @return
	 */
	@ResponseBody
	@RequestMapping(value = "/insert", method = { RequestMethod.GET })
	public String insert(@RequestParam("phone")long phone,
			@RequestParam("title")String title,
			@RequestParam("duration")double duration){
		SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
		System.out.println("1111111111");
		//查询该用户是否存在当天的记录表
		Diary diary = diaryserviceimpl.selectByPhoneAndDate(phone,df.format(new Date()));
		System.out.println("2222222");
		System.out.println("该用户当天的记录表的ID是："+diary);
		if (diary==null) {
			//新建当天的diary表
			Diary diary2 = new Diary();
			diary2.setdPhone(phone);
			diary2.setdNumber(0);
			diary2.setdTime(0.00);
			diary2.setdDate(df.format(new Date()));
			boolean flag = diaryserviceimpl.insert(diary2);
			if (flag) {
				System.out.println("新建当天的diary表成功");
				//新建计划
				Plan plan = new Plan();
				plan.setpDuration(duration);
				plan.setpPhone(phone);
				plan.setpTitle(title);
				boolean flag2 = planserviceimpl.insert(plan);
				if (flag2) {
					System.out.println("计划新建成功");
					return ConvertJson.responseJSON("success");
				}
				return ConvertJson.responseJSON("fail");
			}
			return ConvertJson.responseJSON("fail");
		}else {
			//新建计划
			Plan plan = new Plan();
			plan.setpDuration(duration);
			plan.setpPhone(phone);
			plan.setpTitle(title);
			boolean flag = planserviceimpl.insert(plan);
			if (flag) {
				System.out.println("计划新建成功");			
				return ConvertJson.responseJSON("success");
			}
			return ConvertJson.responseJSON("fail");
		}
		
	}
}
